﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.ComponentModel;
namespace Lesson4_练习题
{
 //创建一个怪物提供一个chaung
   
    
    class MonsterMgr
    {   /// <summary>
        /// 一般管理器都是唯一的，所以把它所以把它做成单例模式  
        /// </summary>
        private  static MonsterMgr instance = new MonsterMgr();   //确保一个类只有一个实例   一个静态私有成员变量 和 一个静态私有方法或属性
        private Hashtable monstertable = new Hashtable();        //用来存储怪物信息

        private MonsterMgr()    ///私有的构造函数，防止外部创建实例
        {
             
        }
        public static  MonsterMgr Instance
        {
            get
           {
                return instance;    
           }
        }
        private int MonsterID = 0;
        public void AddMonster()
        {
            Monster monster = new Monster(MonsterID); //创建怪物
            Console.WriteLine("创建了id为{0}的怪物", MonsterID);
            ++MonsterID;  //怪物id+1
            
            monstertable.Add(monster.id, monster);  //将怪物添加到哈希表
        }

        public void RemoveMonster(int MonsterID)
        {
            //移除怪物
            if(monstertable.ContainsKey(MonsterID))
            {

                (monstertable[MonsterID] as Monster).Dead();
                monstertable.Remove(MonsterID);   //如果能找到对应的ID就移除对应的怪物
            }
        }
    }


    class  Monster
    {
        public int id;   
        //因为有唯一id   ,写一个构造函数
        public Monster(int id)
        {
            this.id = id;
        }
        //怪物死亡逻辑

        public void Dead()
        {
            Console.WriteLine("怪物{0}死亡",id);
        }

    }
    internal class Program
    {
        static void Main(string[] args)
        {
            #region 练习题一
            //请简述Hashtabke的存储规则
            //一个键/值对的存储容器
            //一个键对应一个值键值对存储在数组中

            #endregion

            #region   练习题二
            //制作一个怪物管理器，提供创建怪物
            //移除怪物的方法，每个怪物都有自己的唯一的id
            Console.WriteLine("哈希表练习题");

            MonsterMgr.Instance.AddMonster();
            MonsterMgr.Instance.AddMonster();
            MonsterMgr.Instance.AddMonster();
            MonsterMgr.Instance.AddMonster();
            MonsterMgr.Instance.AddMonster();
            MonsterMgr.Instance.AddMonster();


            MonsterMgr.Instance.RemoveMonster(0);
            MonsterMgr.Instance.RemoveMonster(3);


            #endregion
        }
    }
}
